package mapEditor.model
{
	import flash.events.EventDispatcher;
	
	import map.findPath.FindPathNode;
	
	import mapEditor.events.MapEditorEvent;
	import mapEditor.vo.EditAreaVO;
	
	import utils.DisplayUtil;

	public class MapEditorModel extends EventDispatcher
	{	
		/**
		 *当前的工具类型:1=选择工具;2=拖动工具;3=放大工具;4=缩小工具
		 */		
		private var _toolType:int;
		/**
		 *当前功能模块类型：100=物件编辑;200=地图编辑;300=地图预览 
		 */		
		private var _moduleType:int=100;
		/**
		 *物件编辑-模块编辑类型:101=资源编辑;102=单项编辑
		 */		
		private var _resModuleType:int=101;
		/**
		 *场景编辑-模块编辑类型:201=地形编辑;202=地貌编辑 
		 */		
		private var _sceneModuleType:int=201;

		/**
		 *当前编辑区数据 
		 */		
		private var _editAreaVO:EditAreaVO;
		/**
		 *地形单元格数据 
		 */		
		private var _mapNodes:Array=[];
		/**
		 *地图导航网格 
		 */		
		private var _findPathNodes:Vector.<FindPathNode>
		
		public function MapEditorModel()
		{
			_editAreaVO=new EditAreaVO();
		}
		
		/**
		 *当前的工具类型:1=选择工具;2=拖动工具;3=放大工具;4=缩小工具
		 * @return 
		 * 
		 */		
		public function get toolType():int
		{
			return _toolType;
		}

		/**
		 *当前的工具类型:1=选择工具;2=拖动工具;3=放大工具;4=缩小工具
		 * @param value
		 * 
		 */		
		public function set toolType(value:int):void
		{
			_toolType = value;
			dispatchEvent(new MapEditorEvent(MapEditorEvent.TOOL_TYPE_CHANGE));
		}

		/**
		 *当前功能模块类型：100=物件编辑;200=地图编辑;300=地图预览 
		 */
		public function get moduleType():int
		{
			return _moduleType;
		}

		/**
		 * @private
		 */
		public function set moduleType(value:int):void
		{
			_moduleType = value;
			dispatchEvent(new MapEditorEvent(MapEditorEvent.MODULE_TYPE_CHANGE));
		}

		/**
		 *物件编辑-模块编辑类型:101=资源编辑
		 */
		public function get resModuleType():int
		{
			return _resModuleType;
		}

		/**
		 * @private
		 */
		public function set resModuleType(value:int):void
		{
			_resModuleType = value;
			dispatchEvent(new MapEditorEvent(MapEditorEvent.RES_MODULE_TYPE_CHANGE));
		}

		/**
		 *当前编辑区数据 
		 */
		public function get editAreaVO():EditAreaVO
		{
			return _editAreaVO;
		}

		/**
		 * @private
		 */
		public function set editAreaVO(value:EditAreaVO):void
		{
			_editAreaVO = value;
		}

		/**
		 *场景编辑-模块编辑类型:201=地形编辑;202=地貌编辑
		 */
		public function get sceneModuleType():int
		{
			return _sceneModuleType;
		}

		/**
		 * @private
		 */
		public function set sceneModuleType(value:int):void
		{
			_sceneModuleType = value;
			dispatchEvent(new MapEditorEvent(MapEditorEvent.SCENE_MODULE_TYPE_CHANGE));
		}

		public function clearMapNodes():void
		{
			while(_mapNodes.length>0)
			{
				var arr:Array=_mapNodes.shift() as Array;
				while(arr.length>0)
				{
					DisplayUtil.dispose(arr.shift());
				}
				arr=null;
			}
		}
		
		/**
		 *地形单元格数据
		 */
		public function get mapNodes():Array
		{
			return _mapNodes;
		}

		/**
		 * @private
		 */
		public function set mapNodes(value:Array):void
		{
			_mapNodes = value;
		}

		/**
		 *地图导航网格 
		 */
		public function get findPathNodes():Vector.<FindPathNode>
		{
			return _findPathNodes;
		}

		/**
		 * @private
		 */
		public function set findPathNodes(value:Vector.<FindPathNode>):void
		{
			_findPathNodes = value;
			dispatchEvent(new MapEditorEvent(MapEditorEvent.FIND_PATH_NODES_CHANGE));
		}
	}
}